define(function(require, exports){
	var pubjs = require('pubjs');
	var util = require('util');
	var view  = require('@base/view');

	// IP地址模块
	var IpAddress = view.container.extend({
		init: function( config ) {
			config = pubjs.conf( config, {
				'class': 'M-ipAddress',
				'count': 3, // 可填IP段数
				'width': '',
				'view_model': {
					'ipItems': [] // IP地址信息
				}
			});
			for( var i = 0; i < config.get('count'); i++ ) {
				config.get('view_model/ipItems').push({
					'start': '',
					'end': ''
				});
			}
			this.Super( 'init', arguments );
		},
		afterBuild:function() {
			var el = this.getDOM();
			var C = this.getConfig();
			if(C.width){
				el.css('width', C.width);
			}

			this.reset();
			el.append([
				'<div class="M-ipAddressTitle">',
					'<b>'+LANG('请输入IP地址范围，每一个范围必须包含起始地址和结束地址，最多填写 '),
					'<span ms-text="'+ C.count +'"></span>'+LANG(' 段范围')+'</b>',
				'</div>',
				'<ul class="M-ipAddressBox uk-form">',
					'<li class="M-ipAddressBoxItem" ms-repeat-item="ipItems">',
						'<label ms-attr-for="ip_start{{$index}}">'+LANG('起始地址')+'</label>',
						'<input ms-attr-id="ip_start{{$index}}" class="ml10 w200 mr10" type="text" ms-duplex="item.start" placeholder="0. 0. 0. 0"/>',
						' - ',
						'<label ms-attr-for="ip_end{{$index}}" class="ml10">'+LANG('结束地址')+'</label>',
						'<input ms-attr-id="ip_end{{$index}}" class="ml10 w200" type="text" ms-duplex="item.end" placeholder="0. 0. 0. 0"/>',
					'</li>',
				'</ul>'
			].join(''));
		},
		setData: function( data ) {
			var ipItems = this.vm.$.ipItems;
			if (data && data.length) {
				util.each(ipItems, function(ip, index) {
					var item = data[index];
					if (item) {
						ip.start = item.Start;
						ip.end = item.End;
					}
				});
			}
			return this;
		},
		getData: function() {
			var vm = this.vm.$;
			var retArr = [];
			util.each(vm['ipItems'], function(item) {
				if (item.start || item.end) {
					retArr.push({
						'Start': item.start,
						'End': item.end
					});
				}
			});
			return retArr;
		},
		validate: function( arr ) {
			var i = 0, len = arr.length;
			for( ; i < len; i++ ) {
				var start = arr[i]['Start'];
				var end = arr[i]['End'];
				if( start ) {
					if( end === '' ) {
						pubjs.alert(LANG('结束地址不能为空！'));
						return false;
					}
					else {
						if( !this.isIpAddress( start, end ) ) {
							pubjs.alert(LANG('IP地址格式不正确！'));
							return false;
						}
					}
				}
				else if( end ) {
					if( start === '' ) {
						pubjs.alert(LANG('开始地址不能为空！'));
						return false;
					}
					else {
						if( !this.isIpAddress( start, end ) ) {
							pubjs.alert(LANG('IP地址格式不正确！'));
							return false;
						}
					}
				}
			}
			return true;
		},
		isIpAddress: function( start, end ) {
			var reg =  /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
			return ( reg.test( start ) && reg.test( end ) );
		},
		reset: function() {
			this.vm.reset();
			return this;
		}
	});
	exports.base = IpAddress;
});